package middleware

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func RBACMiddleware(requiredPermission string) gin.HandlerFunc {
	return func(c *gin.Context) {
		roleID, exists := c.Get("roleID")
		if !exists {
			c.JSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized"})
			c.Abort()
			return
		}

		// 这里应该从数据库中获取角色的权限
		// 为了简化，我们使用一个模拟函数
		hasPermission := checkPermission(roleID.(uint), requiredPermission)

		if !hasPermission {
			c.JSON(http.StatusForbidden, gin.H{"error": "Permission denied"})
			c.Abort()
			return
		}

		c.Next()
	}
}

// 模拟权限检查函数
func checkPermission(roleID uint, requiredPermission string) bool {
	// 在实际应用中，这里应该查询数据库来检查权限
	// 为了演示，我们假设管理员角色（ID为1）拥有所有权限
	if roleID == 1 {
		return true
	}

	// 对于其他角色，你需要实现实际的权限检查逻辑
	return false
}
